#pragma once
#ifndef OBR_BOUNDS_H
#define OBR_BOUNDS_H

#include "common.h"

namespace OBR
{
namespace Bounds
{
inline OptixAabb combine(OptixAabb &dest, OptixAabb &src)
{
    OptixAabb combined;
    combined.maxX = max(dest.maxX, src.maxX);
    combined.maxY = max(dest.maxY, src.maxY);
    combined.maxZ = max(dest.maxZ, src.maxZ);
    combined.minX = min(dest.minX, src.minX);
    combined.minY = min(dest.minY, src.minY);
    combined.minZ = min(dest.minZ, src.minZ);
    return combined;
}

inline OptixAabb fromPoint(float3 p)
{
    OptixAabb aabb;
    aabb.maxX = aabb.minX = p.x;
    aabb.maxY = aabb.minY = p.y;
    aabb.maxZ = aabb.minZ = p.z;
    return aabb;
}
} // namespace Bounds
} // namespace OBR

#endif
